package com.wsz.serurity.security;

import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * <p>
 * token管理
 * </p>
 *
 * @author qy
 * @since 2019-11-08
 */
@Component
public class TokenManager {

    private long tokenExpiration = 24*60*60*1000;
    private String tokenSignKey = "123456";

    public String createToken(String username) {
        String token = Jwts.builder()//构建JWT
                .setSubject(username)//主题
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))//设置过期时间
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)//设定签名密钥以及其加密密钥的方法
                .compressWith(CompressionCodecs.GZIP).compact();//压缩Claims如果JWT的Claims集合很大大-也就是说，它包含许多名称/值对，或者单个值非常大或冗长-您可以通过压缩Claims的体积来缩小创建的JWS的大小。
        return token;
    }

    public String getUserFromToken(String token) {
        String user = Jwts.parser().//jwt解码
                setSigningKey(tokenSignKey).//jwt密钥
                parseClaimsJws(token).//解码token
                getBody().getSubject();//获取的部分
        return user;
    }

    public void removeToken(String token) {
        //jwttoken无需删除，客户端扔掉即可。
    }

}
